Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Інститут комп’ютерних наук та інформаційних технологій
Кафедра ІСМ
Звіт
про виконання лабораторної роботи №7
на тему: „Створення Windows-програм”
Виконав:
студент групи КН-3
Львів – 2008
Мета роботи: вивчення складу та структури програми для Windows, розробленої за SDK-технологією фірми Microsoft з використання функції API-інтерфейсу (Application Program Interface).
Завдання для роботи
Ознайомитися із структурою SDK-програми для Windows. Вивчити склад структури WNDCLASS віконного класу, стилі вікон, імена стандартних ресурсів піктограм та курсорів.
Створити та виконати проект програми для Windows, використавши тексти приведених текстів програми, ресурсів та визначення модуля .
Засобами редактора ресурсів Workshop створити нові ресурси меню, курсора, піктограми та підключити їх до програми.
Текст програми
Mssage.cpp
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:EntryWinMain")
//#pragma comment(linker,"/NODEFAULTLIB")
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "winmm.lib")
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include "message.h"
#include "resource.h"
int WINAPI EntryWinMain(void)
{
dwCount = 0;
hFile = CreateFile(OPTIONS_FILE, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
ReadFile(hFile, &opt, sizeof(opt), &dwCount, NULL);
CloseHandle(hFile);
}
if (dwCount != sizeof(opt))
{
memset(&opt, 0, sizeof(opt));
lstrcpy(opt.szAbout, ABOUT_OPT_FILE);
opt.cMethod = 3; //socket
lstrcpy(opt.szRecipient, RECIPIENT);
opt.cLog = 1;
lstrcpy(opt.szLogFile, HISTORY_FILE);
}
WSAStartup(0x0101, &WSAData);
hInstance = GetModuleHandle(NULL);
InitCommonControls();
DialogBox(hInstance, "MAIN", NULL, DlgProc);
return 0;
}
BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hwnd, WM_INITDIALOG, DlgOnInitDialog);
HANDLE_MSG(hwnd, WM_COMMAND, DlgOnCommand);
default:
return FALSE;
}
}
BOOL DlgOnInitDialog(HWND hwnd, HWND, LPARAM)
{
hIcon = LoadIcon(hInstance, "0"/*pszIconResource*/);
SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
switch (opt.cMethod)
{
case 1: SendDlgItemMessage(hwnd, IDC_RADIO_NETSEND, BM_SETCHECK, 1, 0L);
break;
case 2: SendDlgItemMessage(hwnd, IDC_RADIO_MAILSLOT, BM_SETCHECK, 1, 0L);
break;
default: SendDlgItemMessage(hwnd, IDC_RADIO_SOCKET, BM_SETCHECK, 1, 0L);
}
SendDlgItemMessage(hwnd, IDC_USER, WM_SETTEXT, 0, (long)opt.szRecipient);
SendDlgItemMessage(hwnd, IDC_NICKEDIT, WM_SETTEXT, 0, (long)opt.szNick);
SendDlgItemMessage(hwnd, IDC_FILEEDIT, WM_SETTEXT, 0, (long)opt.szLogFile);
if (opt.cLog) SendDlgItemMessage(hwnd, IDC_CHECK_LOG, BM_SETCHECK, 1, 0L);
if (opt.cClear) SendDlgItemMessage(hwnd, IDC_CHECK_CLEAR, BM_SETCHECK, 1, 0L);
return TRUE;
}
void DlgOnCommand(HWND hwnd, int id, HWND, UINT wParam)
{
switch(id)
{
case IDC_ABOUT_BUTTON:
MessageBox(hwnd, "Message v2.3\n\n"
"Copyright © 2005 by Yurij Malanyuk\n"
"Mail to: maly2003@ukr.net\n"
"Freeware. This is 'AS IS' software.\n"
"I'm not responsible for any damage caused by it!\n",
"About", MB_ICONINFORMATION | MB_OK);
break;
case IDC_SEND_BUTTON:
SendDlgItemMessage(hwnd, IDC_STATUS, WM_SETTEXT, 0, (long)MESSAGE_SENDING);
if (SendTextMessage(hwnd))
{
sndPlaySound(SOUND_SENT, SND_ASYNC);
SendDlgItemMessage(hwnd, IDC_STATUS, WM_SETTEXT, 0, (long)MESSAGE_SENT);
if (SendDlgItemMessage(hwnd, IDC_CHECK_CLEAR, BM_GETCHECK, 0, 0L) == BST_CHECKED)
SendDlgItemMessage(hwnd, IDC_MESSAGE_EDIT, WM_SETTEXT, 0, (long)"");
}
else
{
sndPlaySound(SOUND_NOT_SENT, SND_ASYNC);
SendDlgItemMessage(hwnd, IDC_STATUS, WM_SETTEXT, 0, (long)MESSAGE_NOT_SENT);
}
break;
case IDCANCEL:
if (MessageBox(hwnd, "Are you sure want to qui...